﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using ProjetoJornada_DAL.Repositorio;
using Basicas;
using Basicas.Utils;
using Basicas.Utils.excecoes;

namespace ProjetoJornada_Negocios.Negocio
{
    public class NegocioAluno
    {
        #region Atributo
        private RepAluno repAluno;
        private NegocioMatricula negMatricula;
        #endregion

        #region Construtor
        public NegocioAluno()
        {
            this.repAluno = new RepAluno();
            this.negMatricula = new NegocioMatricula();
        }
        #endregion

        #region Metodos
        public Boolean InserirAluno(Aluno aluno)
        {
            Boolean retorno = false;
            try
            {
                Aluno alunoConsultado = this.repAluno.ConsultarAlunoPorCpf(aluno.Cpf);
                
                if (alunoConsultado == null)
                {
                    retorno = this.repAluno.InserirAluno(aluno);
                }
                else
                {
                    retorno = this.repAluno.EditarAluno(aluno);
                }
            }
            catch (Exception ex)
            {
                Auxiliar.GravaLog(ex.Message, "inserirAluno");  
                throw ex;
            }
            return retorno;
        }

        public Boolean RemoverAluno(String cpf)
        {
            Aluno aluno = this.repAluno.ConsultarAlunoPorCpf(cpf);

            if (aluno == null)
            {
                throw new AlunoInexistenteException();
            }
            else
            {
                return this.repAluno.RemoverAluno(cpf);
            }
        }

        public Boolean EditarAluno(Aluno aluno)
        {
            if (aluno == null)
            {
                throw new AlunoInexistenteException();
            }
            else
            {
                return this.EditarAluno(aluno);
            }
        }

        public Aluno ConsultarAlunoPorCpf(String cpf)
        {
            Aluno aluno = this.repAluno.ConsultarAlunoPorCpf(cpf);

            if (aluno == null)
            {
                throw new AlunoInexistenteException();
            }
            else
            {
                return aluno;
            }
        }

        public List<Aluno> ConsultarTodosAlunos()
        {
            List<Aluno> alunos = this.repAluno.ConsultarTodosAlunos();

            if (alunos.Count == 0)
            {
                throw new NenhumAlunoCadastradoException();
            }
            else
            {
                return alunos;
            }
        }

        public List<Aluno> ConsultarAlunoPorNome(String nome)
        {
            List<Aluno> alunos = this.repAluno.ConsultarAlunoPorNome(nome);

            if (alunos.Count == 0)
            {
                throw new AlunosInexistentesException();
            }
            else
            {
                return alunos;
            }
        }
        #endregion
    }
}
